#include "app/app_task.h"
#include <stdio.h>
#include <assert.h>
#include <pthread.h>
#include <unistd.h>

// 全局变量，用于任务中修改
int a = 5;
static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;

// 示例任务：对全局变量 a 加 1（线程安全）
void task_impl(void *argv)
{
    int *p = (int *)argv;
    pthread_mutex_lock(&lock);
    (*p)++;
    printf("[Task] Incremented shared value to %d\n", *p);
    pthread_mutex_unlock(&lock);
}

int main()
{
    if (app_task_init(5) != 0) {
        fprintf(stderr, "Failed to initialize task system.\n");
        return 1;
    }

    // 提交 10 个任务
    for (int i = 0; i < 10000; i++) {
        app_task_register(task_impl, &a);
    }

    // 等待足够时间让任务被消费（比如 1 秒）
    sleep(1);

    // 打印最终结果（应该是 5 + 10 = 15）
    printf("[Main] Final value of a = %d (expected: 105)\n", a);
    // assert(a == 15);  // 可以取消注释以启用断言
    assert(a == 105);
    // 发送退出信号，等待线程结束
    app_task_close();
    app_task_wait();

    printf("[Main] Test completed successfully. Exiting.\n");
    return 0;
}